// 不会`panic`的整数除法。
fn checked_division(dividend: i32, divisor: i32) -> Option<i32> {
    if divisor == 0 {
        // 失败表示成`None`取值。
        return None;
    } else {
    //     结果被包装到`Some`中。
        Some(dividend / divisor)
    }
}
// 此函数处理可能失败的除法
fn try_division(dividend: i32, divisor: i32) {
//     `Option`值可以进行模式匹配,就和其他枚举类型一样
    match checked_division(dividend, divisor) {
        None => println!("{dividend} / {divisor} = 失败"),
        Some(quotient) => {
            println!("{dividend} / {divisor} = {quotient}");
        }
    }
}
fn main() {
    try_division(4, 2);
    try_division(1, 0);

//     绑定`None`到一个变量需要类型标注
    let none: Option<i32> = None;
    let _equivalent_none = None::<i32>;
    let optional_float = Some(0f32);

//     解包`Some`将取出被包装的值
    println!("{optional_float:?} unwraps to {:?}", optional_float.expect("是个浮点数"));
    println!("{optional_float:?} unwraps to {:?}", optional_float.unwrap());
//     解包`None`将会引发`panic`
    println!("{none:?} unwraps to {:?}", none.unwrap());

}
